package cn.kent.optional;

import org.junit.Test;

import java.util.Optional;

/**
 * Optional使用用例
 * - 简介： 避免程序中出现空指针异常
 *
 * {@link java.util.Optional#of(Object)}
 * {@link Optional#empty()}}  ## 返回一个空的 Optional
 * {@link Optional#ofNullable(Object)}}}
 */
public class OptionalTest {
    @Test
    public void test() {
        Girl girl = new Girl();
        girl = null;
        // of方法必须保证t是非空的，否则会 java.lang.NullPointerException
        final Optional<Girl> girl1 = Optional.of(girl);
    }

    @Test
    public void test2() {
        Girl girl = new Girl("杨幂");
//        girl = null; // 测试两次，一次注释掉，内部为null，则返回赵丽颖，否则返回此处new的girl
        final Optional<Girl> optionalGirl = Optional.ofNullable(girl);
        System.out.println(optionalGirl);

        // orElse 当前Optional内部的val是非空的，则返回内部的val
        // 如果内部的t是空的，则返回orElse方法中的参数
        Girl girl1 = optionalGirl.orElse(new Girl("赵丽颖"));
        System.out.println(girl1);
    }

}
